Para el siguiente proyecto se utilizaron las siguientes librerias de python con sus respectivas versiones
import data as dt
import functions as fun
import visualizations as vs
Este laboratorio tiene como propósito particular usar información del Libro de Ordenes de Criptomonedas de diversos exchanges internacionales, con el objetivo primario de visualizar y modelar la microestructura del mercado por medio del comportamiento de Libro de Ordenes y sus caracteristicas como; Matching Engine, Levels, Ask-Bid Volumnes, etc.
Debido a lo anterior se formula pues un objetivo general.
- Elaborar un sistema de herramientas para analizar la microestructura dentro de mercados de criptodivisas
Para lograr con el objetivo general anterior se formulan los siguientes objetivos específicos
Obtener el libro de Ordenes de cada una de las criptomonedas y hacer una comparación entre distintas exchanges para ver similitudes y diferencias.
Modelar la microestructura de las criptomonedas analizadas mediante el uso del modelo de Roll para determinar el spread y compararlo con el dato verdadero
Debido a las limitantes de la función del order book entonces se decidió construir la función para poder obtener durante 90 minutos cada minuto los datos correspondientes al order book de cada uno de los Tickets en cada una de las exchenges que se utilizaron. Estos datos se guardaron en 2 archivos en un formato de tal forma que se pudieran obtener tanto el resumen de los datos, así como poder obtener los order book a cada minuto.
Por otra parte, el OHLC se calculó con la función de la paquetería de CCXT correspondiente, estos datos se obtienen al momento y simplemente se toma en cuenta el momento en el que se empezaron a tomar los datos del order book, finalmente se combinaron ambas tablas para obtener los datos necesarios de la sección de microestructura.
Se decidió tomar los datos de las criptomonedas de Bitcoin, ETH y Solar debido a que tienen una gran participación en el mercado de las criptomonedas, estando en el Top de las monedas más comercializadas y con mayor volumen, Por otra parte, se decidieron utilizar los exchanges de Bitso (una compañía que opera en México y otros países de Latinoamérica) así como de FTX y de Binance que son grandes compañías dentro de estos mercados y que podrían ser una interesante comparación
A continuación se muestra una parte de los datos del order book que estan combinados de todos los ticker y de todas las exchanges utilizadas
dt.df.head(4)
| Ticker | Exchange | TimeStamp | Level | Bid | Ask | Spread | Bid_volume | Ask_volume | Total_volume | Mid_price | VWAP | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | BTC USD | Bitso | 2022-04-28 19:14 | 50.0 | 40138.50 | 40178.66 | 40.16 | 31.486122 | 31.310420 | 62.796542 | 40158.580 | 42051.414000 |
| 1 | BTC USD | Bitso | 2022-04-28 19:15 | 50.0 | 40136.98 | 40173.95 | 36.97 | 31.482912 | 31.310677 | 62.793588 | 40155.465 | 42051.070508 |
| 2 | BTC USD | Bitso | 2022-04-28 19:16 | 50.0 | 40152.42 | 40194.53 | 42.11 | 31.486499 | 31.291853 | 62.778352 | 40173.475 | 42051.854866 |
| 3 | BTC USD | Bitso | 2022-04-28 19:17 | 50.0 | 40097.74 | 40141.18 | 43.44 | 31.486639 | 31.309115 | 62.795753 | 40119.460 | 42050.524050 |
Se decidió que para el Roll's Spread en los primeros días en donde no existían datos suficientes a fin de garantizar la cantidad de datos y del rezago los datos estuvieran en cero, por ello mismo para poder ver de mejor manera los datos se muestra un fragmento de la cola o de los últimos resultados de la tabla
dt.spread_data.tail(4)
| Ticker | Exchange | TimeStamp | Spread | close | Effective Spread | |
|---|---|---|---|---|---|---|
| 806 | SOL USD | Binance | 2022-04-28 20:44 | 0.01 | 98.75 | 0.091324 |
| 807 | SOL USD | Binance | 2022-04-28 20:45 | 0.01 | 98.76 | 0.087750 |
| 808 | SOL USD | Binance | 2022-04-28 20:46 | 0.01 | 98.63 | 0.094340 |
| 809 | SOL USD | Binance | 2022-04-28 20:47 | 0.01 | 98.56 | 0.049800 |
Finalmente el tercer conjunto de datos que resulta ser interesante de detenerse a observar son los datos del order book con todos los niveles dentro de un determinado espacio del tiempo
dt.data_books['Binance | BTC USD'][0].head(4)
| price | volume | type | |
|---|---|---|---|
| 0 | 40161.68 | 7.94633 | bid |
| 1 | 40160.00 | 0.77803 | bid |
| 2 | 40159.67 | 0.06471 | bid |
| 3 | 40159.56 | 0.03254 | bid |
dt.data_books['Binance | BTC USD'][0].tail(4)
| price | volume | type | |
|---|---|---|---|
| 56 | 40173.12 | 0.00100 | ask |
| 57 | 40173.72 | 0.57999 | ask |
| 58 | 40174.02 | 0.01247 | ask |
| 59 | 40174.59 | 0.14000 | ask |
En general son una vista de los datos que se utilizaron si bien existen otros más dentro del archivo de data se utilizan para las visualizaciones
A continuación se presenta una vista de todas los datos de los tickers y de las exchanges, donde además se puede comparar el bid, ask, midle price y el VWAP, se puede observar que en las exchanges más grandes como FTX o Binance las líneas no se alcanzan a observar muy bien ya que el spread es muy pequeño, de igual manera se puede ver como el VWAP está más pegado hacia el midle price debido a que el spread era pequeño y los niveles estaban cerca de ese precio
vs.graph4(dt.df,["Mid_price","Bid",'Ask','VWAP'],"Stats Comparision",dt.colors2,
[str(dt.bitso),str(dt.ftx),str(dt.binance)],['BTC USD','ETH USD','SOL USD'])
Al comparar por Ticker de los precios de cierre se puede observar que si bien todas siguen una misma tendencia en el caso de Bitso los precios están por lo general más alto la mayor parte del tiempo así como que se presentan más volátiles, por el contrario entre FTX y Binance las discrepancias son menores, posiblemente por una mayor integración entre las plataformas así como una mayor participación en el mercado lo que se traduce en que no hay oportunidad de arbitraje y el precio refleja la información del mercado
vs.graph3(dt.spread_data,"close","Close Price",dt.colors,[str(dt.bitso),str(dt.ftx),str(dt.binance)],
['BTC USD','ETH USD','SOL USD'])
De la misma forma en la que ocurre con el close price se puede observar que el spread en el caso de FTX y Binance es muy pequeño en comparación con Bitso, así como de que la mayor parte del tiempo pareciera que no se mueve y sobre todo en el mercado de ETH donde apenas se ven unos spreads atípicos respecto al resto. Posiblemente eso se deba al volumen que se mueve, la cantidad de participantes, la liquidez, así como la posibilidad de la incorporación de Market Makers que distorsionan el spread
vs.graph3(dt.spread_data,"Spread","Close Price",dt.colors,[str(dt.bitso),str(dt.ftx),str(dt.binance)],
['BTC USD','ETH USD','SOL USD'])
Se puede ver a continuación una animación del order book animado como comparativo para el BTC entre Binance y Bitso se puede observar que para Bitso las ordenes estaban más concentradas en un determinado rango mientras en cambio en binance había una mayor movilidad de los distintos niveles y los volúmenes no están tan agrupados
vs.graph2(dt.data_books['Binance | BTC USD'],90,'Binance | BTC USD')
vs.graph2(dt.data_books['Bitso | BTC USD'],90,'Bitso | BTC USD')
Para el modelado de la microestructura se tomo en cuenta el modelo propuesto por Roll para el spread
Sin embargo, hay que hacer notar algunas consideraciones especiales que se consideraron bajos las indicaciones de este proyecto como que son que se tomaba una ventana de tiempo de 5 días sobre los retornos del precio así como de que se tomara el valor absoluto de la covarianza dato que por la poca cantidad de datos se pudiera no tener información, finalmente se consideró que más allá de tomarlo cada 5 minutos se pudiera observar de forma continua
vs.graph4(dt.spread_data,['Spread', 'Effective Spread'],"Stats Comparision",dt.colors3,
[str(dt.bitso),str(dt.ftx),str(dt.binance)],['BTC USD','ETH USD','SOL USD'])
Como se puede observar en la gráfica anterior dentro de Bitso el modelo de Roll's funciona de mejor manera para predecir el cambio en el spread, sin embargo la aproximación no es perfecta, respecto a los exchanges las diferencias entre el modelo y el dato real son muy diferentes, posiblemente porque el existen Market Makers que distorsionan el Spread, un caso interesante es el de Solar en FTX ya que si bien el modelo de roll es más volátil y la escala es mayor de alguna forma se puede observar una misma tendencia.
Tomando en cuenta los resultados anteriores, como se llevó a cabo el proyecto podemos concluir que se cumplieron tanto como el objetivo general planteado como los objetivos específicos ya que como se pudo observar en el desarrollo del proyecto los datos obtenidos fueron interesantes de analizar sobre todo de la comparación entre los distintos exchanges y las posibles razones por las cuáles algunos se comportan de la misma forma (por su integración, participantes, rapidez de transmisión de información, etc.) y como el modelo de Roll's de spread en algunos mercados no parece funcionar posiblemente por la participación de marker makers o algún otro mecanismo a fin de mantener un spead pequeño y fijo a excepción de que trate de un error de las paqueterías